(function ($) {
    /*
     * Plugin zUpdate
     * Xu ly tac vu voi ajax
     * @author Chuột
     * Version 1.0
     */
    $.fn.zUpdate = function (options) {
//=============================================
//Cac gia mac dinh cua doi tuong options
//=============================================
        var defaults = {
            "add": "#add", //id submit form add new
            "edit": "#edit", //id submit form edit
            "delete": ".delete", //class button submit form delete
            "content": "#content"//id tag a delete
        };
        //Ap dung defaults vao options
        options = $.extend(defaults, options);
        //=============================================
        //Cac bien se su dung trong plugin
        //=============================================
        var add = $(options.add);
        var edit = $(options.edit);
        var del = $(options.delete);
        var content = $(options.content);
        //=============================================
        //Khoi tao cac ham can thi khi Plugin duoc su dung
        //=============================================
        init();
        //=============================================
        //Ham khoi dong
        //=============================================
        function init() {
            //Submiting add new form
            $(add).submit(function (e) {
                var url = $(this).attr('action');
                var mscb = fulltrim($(this).find('input[name="mscb"]').val());
                var hoten = fulltrim($(this).find('input[name="hoten"]').val());
                if (mscb.length <= 2)
                {
                    toastr.error("Vui lòng nhập mã số cán bộ (lớn hơn 3 kí tự)!");
                    $(this).find('input[name="mscb"]').focus();
                }
                else if (hoten.length < 1)
                {
                    toastr.error("Vui lòng nhập họ tên cán bộ!");
                    $(this).find('input[name="hoten"]').focus();
                } else {
                    var data = "mscb=" + mscb + "&hoten=" + hoten;
                    Add(add, url, data, "Thêm mới cán bộ hoàn tất!", "Thêm thất bại! <br/>Do đã tồn tại cán bộ mã số này trong CSDL hoặc dữ liệu không chính xác.");
                    e.stopImmediatePropagation();
                }
                return false;
            });
            //Clicking in tag a delete
            $(del).on("click", function (e) {
                var id = $(this).attr("id");
                var url = $(this).attr("href");
                var page = $(".pagination .active span").text();
                if (confirm("Xác nhận xóa cán bộ " + id + "?"))
                {
                    var data = "id=" + id + "&page=" + page;
                    Del(url, data, "Xóa cán bộ hoàn tất! <br/>Cảnh báo: không khuyến khích việc xóa dữ liệu này.", "Xóa thất bại! Do cán bộ này xuất hiện trong các đoàn thanh tra.", content);
                    e.stopImmediatePropagation();
                }
                return false;
            });
            //Submiting add edit
            $(edit).submit(function (e) {
                var url = $(this).attr('action');
                var id = fulltrim($(this).find('input[name="id"]').val());
                var mscb = fulltrim($(this).find('input[name="mscb"]').val());
                var hoten = fulltrim($(this).find('input[name="hoten"]').val());
                var mscbolder = $(this).find('input[name="mscbolder"]').val();
                var hotenolder = $(this).find('input[name="hotenolder"]').val();
                var dataolder = [mscbolder, hotenolder];
                if (mscb.length <= 2)
                {
                    toastr.error("Vui lòng nhập mã số cán bộ (lớn hơn 3 kí tự)!");
                    $(this).find('input[name="mscb"]').focus();
                }
                else if (hoten.length < 1)
                {
                    toastr.error("Vui lòng nhập họ tên cán bộ!");
                    $(this).find('input[name="hoten"]').focus();
                }
                else if (hoten === hotenolder && mscb === mscbolder)
                {
                    toastr.warning("Không có gì để lưu lại!");
                    $(this).find('input[name="mscb"]').focus();
                }
                else {
                    var data = [id, mscb, hoten];
                    Edit(edit, url, data, dataolder, "Chỉnh sửa cán bộ hoàn tất!", "Chỉnh sửa thất bại! <br/>Do đã tồn tại cán bộ mã số này trong CSDL hoặc dữ liệu không chính xác.");
                    e.stopImmediatePropagation();
                }
                return false;
            });
        }
        //=============================================
        //Ham xu ly khi co su kien voi phuong thuc post
        //=============================================
        function Add(form, url, data, success, fail)
        {
            $.ajax(
                    {
                        url: url,
                        type: "post",
                        data: data,
                        beforeSend: function (request) {
                            return request.setRequestHeader('X-CSRF-Token', $("meta[name='token']").attr('content'));
                        },
                        datatype: "text"
                    }).done(function (result) {
                if (result === "true")
                {
                    $(form).find('input[name="mscb"]').val("");
                    $(form).find('input[name="hoten"]').val("");
                    $(form).find('input[name="mscb"]').focus();
                    toastr.success(success);
                }
                else {
                    $(form).find('input[name="mscb"]').focus();
                    toastr.error(fail);
                }
            }).fail(function (jqXHR, ajaxOptions, thrownError)
            {
                toastr.error('No response from server!');
            });
        }
        //=============================================
        //Ham xu ly khi co su kien voi phuong thuc post
        //=============================================
        function Del(url, data, success, fail, content)
        {
            $.ajax(
                    {
                        url: url,
                        type: "post",
                        data: data,
                        beforeSend: function (request) {
                            return request.setRequestHeader('X-CSRF-Token', $("meta[name='token']").attr('content'));
                        },
                        datatype: "html"
                    }).done(function (data) {
                if (data !== "")
                {
                    $(content).hide().fadeIn("slow").html(data.html);
                    toastr.warning(success);
                }
                else {
                    toastr.error(fail);
                }
            }).fail(function (jqXHR, ajaxOptions, thrownError)
            {
                toastr.error('No response from server!');
            });
        }
        //=============================================
        //Ham xu ly khi co su kien voi phuong thuc post
        //=============================================
        function Edit(form, url, data, dataolder, success, fail)
        {

            var value = "id=" + data[0] + "&mscb=" + data[1] + "&hoten=" + data[2];
            $.ajax(
                    {
                        url: url,
                        type: "post",
                        data: value,
                        beforeSend: function (request) {
                            return request.setRequestHeader('X-CSRF-Token', $("meta[name='token']").attr('content'));
                        },
                        datatype: "text"
                    }).done(function (result) {
                if (result === "true")
                {
                    $(form).find('input[name="mscbolder"]').val(data[1]);
                    $(form).find('input[name="hotenolder"]').val(data[2]);
                    toastr.success(success);
                }
                else {
                    $(form).find('input[name="mscb"]').val(dataolder[0]);
                    $(form).find('input[name="hoten"]').val(dataolder[1]);
                    toastr.error(fail);
                }
                $(form).find('input[name="mscb"]').focus();
            }).fail(function (jqXHR, ajaxOptions, thrownError)
            {
                toastr.error('No response from server!');
            });
        }
        //=============================================
        //Ham cat khoang trang toan chuoi
        //=============================================
        function fulltrim(str)
        {
            return  str.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, '').replace(/\s+/g, ' ');
        }
    };
})(jQuery);